from rqalpha.apis import *
from rqalpha.environment import Environment

__config__ = {
    "base": {
        "accounts": {
            "stock": 1000000,
        },
        "start_date": "20180102",
        "end_date": "20180110",
        'frequency': 'tick',
    },
    'mod': {
        # 模拟撮合模块
        'sys_simulation': {
            # 撮合方式。current_bar 当前 bar 收盘价成交，next_bar 下一 bar 开盘价成交，best_own 己方最优价格成交（tick 回测使用）
            # best_counterparty 对手方最优价格成交（tick 回测使用），last 最新价成交（tick 回测使用）
            'matching_type': 'best_own'
        }
    }
}


# 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。
def init(context):
    logger.info("init")
    context.s1 = "000001.XSHE"
    # context.s1 = "600507.XSHG"
    update_universe(context.s1)
    # 是否已发送了order
    subscribe(context.s1)
    context.fired = False
    logger.info('context:----', context)


def before_trading(context):
    pass


# 你选择的证券的数据更新将会触发此段逻辑，例如日或分钟历史数据切片或者是实时数据切片更新
# def handle_bar(context, bar_dict):
def handle_tick(context, tick):
    # 开始编写你的主要的算法逻辑

    # bar_dict[order_book_id] 可以拿到某个证券的bar信息
    # context.portfolio 可以拿到现在的投资组合状态信息

    # 使用order_shares(id_or_ins, amount)方法进行落单
    # print(tick.order_book_id, context.now)
    # print(Environment.get_instance().config)
    # TODO: 开始编写你的算法吧！
    # print(tick)
    if not context.fired:
        # order_percent并且传入1代表买入该股票并且使其占有投资组合的100%
        # order_percent(context.s1, -1)
        # order_shares(context.s1, -100)
        order_shares(context.s1, -100, style=LimitOrder(12))
        context.fired = True
